from h2ogpte import H2OGPTE

# Step 1: Set up client
# Instantiate an h2oGPTe client by providing:
# - address (address): Specifies the URL where Enterprise h2oGPTe is hosted. The address should be where the API key was created.
# - global API key (api_key): Provides full system-wide access to all collections, documents, chats, and settings within the h2oGPTe service, allowing for secure communication and interaction with all aspects of your work.
client = H2OGPTE(
    address="https://h2ogpte.genai.h2o.ai",
    api_key='sk-iYH75MC2q2CNkssLLamUpbZKxZCjL5PLFxBNRKqmnH4HdRnz',
)

# Create Collection
collection_id = client.create_collection(
    name="Pruebas Syndeo",
    description="Excel Pruebas",
)

file_path = 'PRUEBAS_CORTAS.xlsx'
with open(file_path.resolve(), "rb") as f:
    upload_id = client.upload(file_path.name, f)

# Converting the input into chunked text and embeddings...
client.ingest_uploads(collection_id, [upload_id])

chat_session_id = client.create_chat_session(collection_id)

texto = (
    "Eres un Analista experto que trabaja para una empresa B2B que se encarga de conseguirle clientes a empresas de Latinoamérica. "
    "Todos los días tu jefe te entrega un Excel que contiene 31 columnas con los siguientes títulos:\n\n"
    "\"FECHA\", \"ID CLIENTE\", \"NOMBRE DEL CLIENTE\", \"ID TARGET\", \"EMPRESA\", \"NIT / RUC\", \"CANAL\", \"SECTOR\", "
    "\"EMPLEADOS\", \"CIUDAD\", \"PAIS\", \"FACTURACIÓN EN MILES DE USD\", \"AÑO DE FACTURACIÓN\", \"CARGO\", \"NOMBRE\", "
    "\"TELEFONO\", \"CELULAR\", \"CORREO\", \"LINKEDIN\", \"OBSERVACIONES\", \"ESTADO\", \"ID ANALISTA\", \"NOMBRE ANALISTA\", "
    "\"FECHA GESTIÓN ANALISTA\", \"ID ESTRTEGA\", \"NOMBRE ESTRATEGA\", \"FECHA GESTIÓN ESTRATEGA\", \"ID AUDITOR\", "
    "\"NOMBRE AUDITOR\", \"FECHA GESTIÓN AUDITOR\", \"ESTADO DE LA CITA AGENDADA\"\n\n"
    "Tu jefe te entrega la información correspondiente a las columnas de \"FECHA\", \"ID CLIENTE\", \"NOMBRE DEL CLIENTE\", "
    "\"ID TARGET\", \"EMPRESA\", \"NIT / RUC\", \"PAIS\", \"CARGO\", \"ESTADO\", \"ID ANALISTA\", \"NOMBRE ANALISTA\" y te pide "
    "completar la información correspondiente a las columnas de \"CANAL\", \"SECTOR\", \"EMPLEADOS\", \"CIUDAD\", "
    "\"FACTURACIÓN EN MILES DE USD\", \"AÑO DE FACTURACIÓN\", \"NOMBRE\", \"TELEFONO\", \"CELULAR\", \"CORREO\", "
    "\"LINKEDIN\", \"OBSERVACIONES\". Debes dejar vacías las columnas de \"FECHA GESTIÓN ANALISTA\", \"ID ESTRTEGA\", "
    "\"NOMBRE ESTRATEGA\", \"FECHA GESTIÓN ESTRATEGA\", \"ID AUDITOR\", \"NOMBRE AUDITOR\", \"FECHA GESTIÓN AUDITOR\", "
    "\"ESTADO DE LA CITA AGENDADA\". Además, cuando termines de completar las columnas requeridas para cada empresa, debes "
    "cambiar el \"ESTADO\" de \"POTENCIAL\" a \"NO CONTACTADO\".\n\n"
    "Cabe resaltar que, en algunos casos, tu jefe no siempre ingresa el NIT o RUC, por lo que en la columna de \"NIT / RUC\" "
    "no siempre aparece un número, sino un código de letras. Solo toma como correcto el NIT o RUC que contenga números, no los "
    "NIT o RUC que contengan letras. En la columna de \"CANAL\" debes ingresar el canal por el que encontraste la información "
    "de la empresa y del contacto. Los datos deben ser lo más recientes posibles y el rango de la persona en el cargo especificado "
    "debe ser el más alto posible. Si no encuentras la información de \"TELEFONO\", \"CELULAR\" y \"CORREO\" llena los espacios "
    "con \"XXXXXXXXXX\". En la columna de \"OBSERVACIONES\" escribe en pocas palabras las observaciones más relevantes para contactar "
    "a la persona en el cargo y/o información a tener en cuenta sobre la empresa. No debes inventar ningún tipo de información, toda "
    "la información que ingreses debe poder ser comprobable por alguna fuente o medio. Para la información de la empresa utiliza la "
    "menor cantidad de fuentes posibles que permitan obtener la información verídica y actual, para la información del contacto utiliza "
    "únicamente LinkedIn como fuente.\n\n"
    "El Excel PRUEBAS_CORTAS en la colección es el que te asignó tu jefe para el día de hoy. Debes entregar el Excel con la información "
    "encontrada para las columnas que se te pidió completar. Por último, debes mostrar el tiempo exacto que te demoraste completando el Excel."
)


with client.connect(chat_session_id) as session:
    # Simple Question for Document Collection
    answer = session.query(
        texto[0],
    ).content
    breakpoint()
    print(answer)


'''with client.connect(chat_session_id) as session:
    
    reply = session.query(
        message= """Eres un Analista experto que trabaja para una empresa B2B que se encarga de conseguirle clientes a empresas de Latinoamérica. Todos los días tu jefe te entrega un Excel que contiene 31 columnas con los siguientes títulos:

"FECHA", "ID CLIENTE", "NOMBRE DEL CLIENTE", "ID TARGET", "EMPRESA", "NIT / RUC", "CANAL", "SECTOR", "EMPLEADOS", "CIUDAD", "PAIS", "FACTURACIÓN EN MILES DE USD", "AÑO DE FACTURACIÓN", "CARGO", "NOMBRE", "TELEFONO", "CELULAR", "CORREO", "LINKEDIN", "OBSERVACIONES", "ESTADO", "ID ANALISTA", "NOMBRE ANALISTA", "FECHA GESTIÓN ANALISTA", "ID ESTRTEGA", "NOMBRE ESTRATEGA", "FECHA GESTIÓN ESTRATEGA", "ID AUDITOR", "NOMBRE AUDITOR", "FECHA GESTIÓN AUDITOR", "ESTADO DE LA CITA AGENDADA"

En particular, tu jefe te entrega la información correspondiente a las columnas de "FECHA", "ID CLIENTE", "NOMBRE DEL CLIENTE", "ID TARGET", "EMPRESA", "NIT / RUC", "PAIS", "CARGO", "ESTADO", "ID ANALISTA", "NOMBRE ANALISTA" y te pide completar la información correspondiente a las columnas de "CANAL", "SECTOR", "EMPLEADOS", "CIUDAD", "FACTURACIÓN EN MILES DE USD", "AÑO DE FACTURACIÓN", "NOMBRE", "TELEFONO", "CELULAR", "CORREO", "LINKEDIN", "OBSERVACIONES". Debes dejar vacías las columnas de "FECHA GESTIÓN ANALISTA", "ID ESTRTEGA", "NOMBRE ESTRATEGA", "FECHA GESTIÓN ESTRATEGA", "ID AUDITOR", "NOMBRE AUDITOR", "FECHA GESTIÓN AUDITOR", "ESTADO DE LA CITA AGENDADA". Además, cuando termines de completar las columnas requeridas para cada empresa, debes cambiar el "ESTADO" de "POTENCIAL" a "NO CONTACTADO".

Cabe resaltar que, en algunos casos, tu jefe no siempre ingresa el NIT o RUC, por lo que en la columna de "NIT / RUC" no siempre aparece un número, sino un código de letras. Solo toma como correcto el NIT o RUC que contenga números, no los NIT o RUC que contengan letras. En la columna de "CANAL" debes ingresar el canal por el que encontraste la información de la empresa y del contacto. Los datos deben ser lo más recientes posibles y el rango de la persona en el cargo especificado debe ser el más alto posible. Si no encuentras la información de "TELEFONO", "CELULAR" y "CORREO" llena los espacios con "XXXXXXXXXX". En la columna de "OBSERVACIONES" escribe en pocas palabras las observaciones más relevantes para contactar a la persona en el cargo y/o información a tener en cuenta sobre la empresa. No debes inventar ningún tipo de información, toda la información que ingreses debe poder ser comprobable por alguna fuente o medio. Para la información de la empresa utiliza la menor cantidad de fuentes posibles que permitan obtener la información verídica y actual, para la información del contacto utiliza únicamente LinkedIn como fuente.

El Excel PRUEBAS_DEEP_RESEARCH_H2O.xlsx en el siguiente repositorio https://github.com/gf-gonzalez/SYNH2O.git es el que te asignó tu jefe para el día de hoy. Debes entregar el Excel con la información encontrada para las columnas que se te pidió completar. Por último, debes mostrar el tiempo exacto que te demoraste completando el Excel."""
,
        llm='auto',
        llm_args=dict(use_agent=True)
    )
    print(reply.content)'''

